#ifndef __PIECEGL_H__
#define __PIECEGL_H__

class Piece ;

#ifdef __APPLE__
#include <GLUT/Glut.h>
#else
#include <GL/glut.h>
#endif

#include "Piece.h"

#define BLANC true
#define NOIR false

class PieceGL {
	private :
	Piece * monParent ;					// Pointeur sur la Piece associée
	bool	couleur ;					// Couleur de la pièce ( BLANC (true) ou NOIR (false) )
	PieceGL * child ;					// Enfant de PieceGL

	bool selected ;						// Si la pièce est sélectionnée
	static PieceGL * selectedPiece;		// Pointeur static sur la PieceGL sélectionnée

	GLuint listpicking ;				// Identifiant de la liste d'affichage, pour le picking
	bool pickingdessine ;				// Si la liste d'affichage a été fabriquée, pour le picking
	
	void makePicking () ;				// Fabrique la liste d'affichage, pour le picking

	protected :
	virtual void drawPiece () ;			// Description des sommets de la pièce
	
	public :
	PieceGL (Piece * parent = NULL, bool couleur = false, PieceGL * child = NULL) ;		// Constructeur : Piece parente, couleur, PieceGL enfant
	virtual ~PieceGL () ;																// Destructeur
	
	void make () ;							// Génère la liste d'affichage de la pièce 
	void draw() ;							// Affiche la pièce
	void drawPicking() ;					// Affiche la pièce pour le picking
	void movetoPosition (int x, int y) ;	// Déplace la piece aux coordonnées x, et y de l'échiquier.
	void toggleSelect() ;					// Gère la selection
	
	void setSelected (bool sel) { selected = sel ;}		// Accesseur en écriture sur selected			
	Piece * getPiece () const { return monParent ; }	// Accesseur sur la piece parente
	bool getCouleur () const { return couleur ; }		// Accesseur sur la couleur
	
	virtual int & getl()=0 ;
	virtual bool & isd()=0 ;
	virtual int & getnv()=0 ;
	virtual int & getnf()=0 ;
	virtual GLfloat * getv()=0 ;
	virtual int * getf()=0 ;
	virtual GLfloat* getvn()=0;
		
};
#endif
